package org.patterns.behavior.state;


/**
 * 透支状态：具体状态类
 * 继承自账户状态类，代表账户处于透支状态时的行为。
 * 当账户余额低于0但未达到限制时，处于此状态。
 */
public class OverdraftState extends AccountState {

    /**
     * 透支状态构造函数
     * @param state 原账户状态对象，用于继承原状态的账户引用
     */
    public OverdraftState(AccountState state) {
        this.account = state.account;
    }

    /**
     * 存款操作
     * @param amount 存款金额，需为正值
     */
    public void deposit(double amount) {
        // 增加账户余额并触发状态检查
        account.setBalance(account.getBalance() + amount);
        stateCheck();
    }

    /**
     * 取款操作
     * @param amount 取款金额，需为正值
     */
    public void withdraw(double amount) {
        // 减少账户余额并触发状态检查
        account.setBalance(account.getBalance() - amount);
        stateCheck();
    }

    /**
     * 利息计算方法
     * 透支状态下需要计算利息，具体实现暂为控制台输出提示
     */
    public void computeInterest() {
        System.out.println("计算利息！");
    }

    /**
     * 状态转换检查方法
     * 据余额判断状态迁移规则：
     * 1. 余额>0 转换为正常状态
     * 2. 余额<=-2000 转换为限制状态
     * 3. -2000<余额<=0 保持透支状态
     */
    public void stateCheck() {
        // 多级状态转换逻辑
        if (account.getBalance() > 0) {
            account.setState(new NormalState(this));
        }
        else if (account.getBalance() <= -2000) {
            account.setState(new RestrictedState(this));
        }
    }
}

